package com.flyqiu.flow.api.element;

import com.flyqiu.flow.api.std.ElementActivityHandler;
import com.flyqiu.flow.api.std.ElementCompleteHandler;
import com.flyqiu.flow.api.std.ElementStartHandler;
import com.flyqiu.flow.bpmn.element.BaseProcElement;

public interface FlyQiuFlowElementManage {

    /**
     * 注册元素
     *
     * @param elementType 元素标识
     * @param modelClazz  元素模型类型
     * @param instClazz   元素模型实例类型
     */
    void registerProcElement(String elementType, Class<? extends BaseProcElement> modelClazz, Class<? extends ElementActivityHandler> instClazz);

    /**
     * 注册元素
     *
     * @param registerWrapper 元素注册容器
     */
    void registerProcElement(ProcElementRegisterWrapper registerWrapper);

    /**
     * 是否存在指定元素类型的处理器
     *
     * @param elementType 元素类型
     * @return true存在 false不存在
     */
    boolean hasElementHandler(String elementType);

    /**
     * 获取指定元素标识的处理
     *
     * @param elementType 元素标识
     * @return
     */
    ProcElementRegisterWrapper getWrapper(String elementType);

    /**
     * 创建元素活动实例
     *
     * @param elementType 元素唯一标识
     * @return
     */
    ElementStartHandler<?> createStartInst(String elementType);

    ElementCompleteHandler createCompleteInst(String elementType);

    /**
     * 创建元素
     *
     * @param elementType 元素类型
     * @return
     */
    BaseProcElement createElement(String elementType);
}
